package com.xue.rpc.client;

import java.net.Socket;

/**
 * SocketClient
 * @author 北京八维博大科技 薛建新
 * @date 2022年9月3日 下午2:25:26
 * @Copyright 北京八维博大科技
 */
public class SocketClient {

	public byte[] call(String host, int port, byte[] reqData) {
		try (Socket client = new Socket(host, port)) {
			client.getOutputStream().write(reqData);
			client.getOutputStream().flush();
			// 1）发送完后调用Socket的shutdownOutput()方法关闭输出流，这样对端的输入流上的read操作就会返回-1。
			// 注意不能调用socket.getInputStream().close()。这样会导致socket被关闭。
			// 当然如果不需要继续在socket上进行读操作，也可以直接关闭socket。
			// 但是这个方法不能用于通信双方需要多次交互的情况。
			// 2）发送数据时，约定数据的首部固定字节数为数据长度。这样读取到这个长度的数据后，就不继续调用read方法。
			// 3）为了防止read操作造成程序永久挂起，还可以给socket设置超时。
			client.shutdownOutput();
			return client.getInputStream().readAllBytes();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}
